#include "pluginmanager.h"



PluginManager PluginManager::instance;


PluginManager::PluginManager()
{
    loadPlugins();
}

void PluginManager::loadPlugins()
{
    plugins.clear();
    QString pluginRootPath = ConfigManager::getInstance().getPluginPath();

    // 扫描目录下的所有子目录文件夹子
    QDir rootDir = QDir(pluginRootPath);
    QFileInfoList fileInfoList = rootDir.entryInfoList(QDir::Dirs);
    qDebug() << "plugins" << fileInfoList;
    for(auto fileInfo : fileInfoList){
        // 加载插件

        QDir pluginPath = QDir(fileInfo.filePath());
        // 加载配置文件
        QString configPath = fileInfo.filePath() + "/" + "config.json";
        // 解析配置信息
        if(!Utils::checkFileExists(configPath)){
            qDebug() << "配置文件不存在" << configPath;
            continue;
        }
        QJsonObject configData = Utils::readJson(configPath);
        // 读取入口文件位置
        QString entryFile = fileInfo.filePath() + "/" + configData.value("entry").toString("entry.js"); // 默认入口文件，entry.js
        if(!Utils::checkFileExists(entryFile)){
            qDebug() << "插件入口文件不存在" << entryFile;
            continue;
        }
        // 读取插件脚本文件
        QString content = Utils::readJs(entryFile);
        PluginInfo pluginInfo;
        pluginInfo.code = content;
        pluginInfo.author = configData.value("author").toString("unknown");
        pluginInfo.description = configData.value("description").toString("unknown");
        pluginInfo.version = configData.value("version").toString("unknown");
        pluginInfo.name = configData.value("name").toString("unknown");
        pluginInfo.filePath = fileInfo.filePath();
//        PluginItem *item = new PluginItem();
//        item->setPluginInfo(pluginInfo);
        plugins.push_back(pluginInfo);
        qDebug() << "插件加载完成： " << pluginInfo.name << "\n code: ";
    }
}
